
/**
 * ---封装深克隆---
 * */

// 1.2 定义深克隆的方法
export const cloneDeep = (obj) => {
  // 1.1 判断是否是对象
  const isObject = (obj) => (typeof obj === 'object' || typeof obj === 'function') &&  obj !== 'null'

  if (!isObject(obj)) {throw new Error('参数不是对象')}
  // 1.3 如果参数为数组，则复制数组各元素，否则复制对象属性
  const newObject = Array.isArray(obj) ? [...obj] : { ...obj }
  // 1.4 迭代
  Object.keys(newObject).forEach((key) => {
    // 1.5 判断如果遍历到的属性值为对象，则继续递归cloneDeep
    if (isObject(newObject[key])) {
      newObject[key] = cloneDeep(newObject[key])
    }
  })
  return newObject
}


